﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bussiness;
using Data;
using System.Collections;
using Presentation.Controls;
using System.IO;
using System.Configuration;

namespace Presentation.Admin
{
    public partial class ABM_Proyecto_Form : System.Web.UI.Page
    {
        private List<Imagen> lisImagenesProyecto = new List<Imagen>();
        private List<Imagen> lisImagenesTemp = new List<Imagen>();
        private List<Imagen> lisImagenesGridView = new List<Imagen>();
        private Guid idProyecto = new Guid();
        private bool esUpdate = false;
        private string savePath;
        private string ruta;
        private string UploadPath = "~/Images/Upload/";


        protected void btnOpenPopUpAgregarImagen_OnClick(object sender, EventArgs e)
        {
            this.AgregarImagenModalPopup.Show();
        }

        protected void btnSavePopUpAgregarImagen_OnClick(object sender, EventArgs e)
        {
            SaveImage();
        }

        protected void btnClosePopUpAgregarImagen_OnClick(object sender, EventArgs e)
        {
            resetAgregarImagenForm();
            this.AgregarImagenModalPopup.Hide();
        }

        private void SaveImage()
        {
            savePath = MapPath(UploadPath + Path.GetFileName(fileupload1.FileUpload.FileName));
            ruta = Path.GetFileName(fileupload1.FileUpload.FileName);
            if (ControladoraABMImagen.checkFileNameExist(ruta))
            {
                showlblFileUpload();
                lblFileUpload.Text = "El nombre de archivo ya existe, por favor cambielo.";
                this.AgregarImagenModalPopup.Show();
                return;
            }
            fileupload1.FileUpload.SaveAs(savePath);
            lisImagenesTemp.Add(ControladoraABMImagen.agregarImagen(fileupload1.Alt, ruta, fileupload1.Titulo, chkEsPlano.Checked, chkEsPresentacion.Checked, chkEsUbicacion.Checked));
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesTemp);
            refreshGvImagenes();
            resetAgregarImagenForm();
            ShowAppropiateFormControls();
            this.AgregarImagenModalPopup.Hide();
        }

        private void showlblFileUpload()
        {
            lblFileUpload.Visible = true;
        }

        private void resetAgregarImagenForm()
        {
            fileupload1.Alt = "";
            fileupload1.Titulo = "";
            hidelblFileUpload();
            lblFileUpload.Text = "";
            chkEsPlano.Checked = false;
            chkEsPresentacion.Checked = false;
        }

        private void hidelblFileUpload()
        {
            lblFileUpload.Visible = false;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            checkIsUpdate();
            if (!Page.IsPostBack) prepararForm();
            ShowAppropiateFormControls();
        }

        private void ShowAppropiateFormControls()
        {
            if (((List<Imagen>)Session["lisImagenesGridView"]).Count >= 10)
            { DisableAgregarImagenControl(); }
            else { EnableAgregarImagenControl(); }
            if (!chkActivo.Checked)
            {
                DisableProyectoInactivoControls();
                if (((List<Imagen>)Session["lisImagenesGridView"]).Count >= 1)
                { DisableAgregarImagenControl(); }
                else { EnableAgregarImagenControl(); }
            }
        }

        protected void gvImagenes_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Image thumbnail = (Image)e.Row.FindControl("thumbnail");
                Guid ImagenID = new Guid(((Label)e.Row.FindControl("ImagenID")).Text);
                thumbnail.ImageUrl = ConfigurationManager.AppSettings["ImagesUploadPath"] + Imagen.getRuta(ImagenID);
            }
        }

        private void EnableAgregarImagenControl()
        {
            btnOpenPopUpAgregarImagen.Enabled = true;
        }

        private void checkIsUpdate()
        {
            if (!String.IsNullOrEmpty(Request.QueryString["idProyecto"]))
            {
                idProyecto = new Guid(Request.QueryString["idProyecto"]);
                esUpdate = true;
            }
        }

        private void prepararForm()
        {
            createSession("lisImagenesGridView");
            loadValues();
            refreshGvImagenes();
        }

        private void createSession(string name)
        {
            //if (Session[name] == null && name.Equals("lisImagenesGridView")) 
            Session.Add(name, new List<Imagen>());
        }

        private void refreshGvImagenes()
        {
            gvImagenes.DataSource = ((List<Imagen>)Session["lisImagenesGridView"]);
            gvImagenes.DataBind();
        }

        private void loadValues()
        {
            setFechaPublicacion();
            if (esUpdate) loadValues(idProyecto);
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesProyecto);
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesTemp);
        }

        private void setFechaPublicacion()
        {
            fechaPublicacion.DdlAnoMes.Items.FindByValue(FechaPublicacion.getFechaFormattedYear(DateTime.Now)).Selected = true;
        }

        private void loadValues(Guid idProyecto)
        {
            Data.Proyecto n = ControladoraABMProyecto.getProyecto(idProyecto);
            //calFechaIniPublicacion.Date = n.fechaPublicacionInicio.Value;
            //calFechaFinPublicacion.Date = n.fechaPublicacionFin.Value;
            setFechaPublicacion(n.anoPublicacion);
            txtDescripcion.Text = n.descripcion;
            txtNombre.Text = n.nombre;
            txtCaracteristicas.Text = n.caracterisiticas;
            txtSuperficie.Text = n.superficie;
            txtUbicacion.Text = n.ubicacion;
            lisImagenesProyecto.AddRange(n.getImagenes());            
            chkActivo.Checked = n.activo;
        }

        private void DisableAgregarImagenControl()
        {
            btnOpenPopUpAgregarImagen.Enabled = false;
        }

        private void setFechaPublicacion(DateTime fecha)
        {
            unSelectFechaPublicacion();
            try
            {
                fechaPublicacion.DdlAnoMes.Items.FindByValue(FechaPublicacion.getFechaFormattedYear(fecha)).Selected = true;
            }
            catch (Exception ex)
            {
                fechaPublicacion.DdlAnoMes.Items.Add(FechaPublicacion.createItem(fecha, "yyyy"));
            }
        }

        private void unSelectFechaPublicacion()
        {
            foreach (ListItem i in fechaPublicacion.DdlAnoMes.Items)
            {
                i.Selected = false;
            }
        }

        protected void gvImagenes_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            Guid idImagen = new Guid();
            foreach (DictionaryEntry entry in e.Keys)
            {
                idImagen = new Guid(entry.Value.ToString());
            }
            ((List<Imagen>)Session["lisImagenesGridView"]).Remove(((List<Imagen>)Session["lisImagenesGridView"]).Find(x => x.id == idImagen));
            ShowAppropiateFormControls();
            refreshGvImagenes();
        }       

        protected void btnSubir_Click(object sender, EventArgs e)
        {
            //crear la mini
            //guardar la mini
            //guardar la full
            //crear imagen y persistir
            //asociar imagen con novedad, si es nuevo no se va a poder asociar
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (esUpdate)
            {
                ControladoraABMProyecto.updateProyecto(DateTime.Parse(fechaPublicacion.DdlAnoMes.SelectedValue),
                                                       idProyecto,
                                                       txtNombre.Text,
                                                       txtCaracteristicas.Text,
                                                       txtUbicacion.Text,
                                                       txtDescripcion.Text,
                                                       (List<Imagen>)Session["lisImagenesGridView"],
                                                       txtSuperficie.Text,                                                       
                                                       chkActivo.Checked
                                                      );
            }
            else
            {
                ControladoraABMProyecto.addProyecto(DateTime.Parse(fechaPublicacion.DdlAnoMes.SelectedValue),
                                                  txtUbicacion.Text,
                                                  txtSuperficie.Text,
                                                  txtCaracteristicas.Text,
                                                  txtNombre.Text,
                                                  txtDescripcion.Text,
                                                  (List<Imagen>)Session["lisImagenesGridView"],
                                                  chkActivo.Checked
                                                  );
                Response.Redirect("~/Admin/ABM_Proyecto.aspx");
            }
        }

        protected void chkActivo_CheckedChanged(object sender, EventArgs e)
        {
            if (chkActivo.Checked)
            { EnableProyectoInactivoControls(); }
            else 
            { DisableProyectoInactivoControls(); }
        }

        private void EnableProyectoInactivoControls()
        {
            lblUbicacion.Visible = true;
            txtUbicacion.Visible = true;
            lblDescripcion.Visible = true;
            txtDescripcion.Visible = true;
            lblSuperficie.Visible = true;
            txtSuperficie.Visible = true;
            lblCaracteristicas.Visible = true;
            txtCaracteristicas.Visible = true;
            txtUbicacion.Enabled = true;
            txtDescripcion.Enabled = true;
            txtSuperficie.Enabled = true;
            txtCaracteristicas.Enabled = true;
            //brLblCaracteristicas.Visible = true;
            //brLblSuperficie.Visible = true;
            //brTxtCaracteristicas.Visible = true;
            //brTxtSuperficie.Visible = true;
            //brlblActivo.Visible = true;
            //brlblUbicacion.Visible = true;
        }

        private void DisableProyectoInactivoControls()
        {
            lblUbicacion.Visible = false;
            txtUbicacion.Visible = false;
            lblDescripcion.Visible = false;
            txtDescripcion.Visible = false;
            lblSuperficie.Visible = false;
            txtSuperficie.Visible = false;
            lblCaracteristicas.Visible = false;
            txtCaracteristicas.Visible = false;
            txtUbicacion.Enabled = false;
            txtDescripcion.Enabled = false;
            txtSuperficie.Enabled = false;
            txtCaracteristicas.Enabled = false;
            //brLblCaracteristicas.Visible = false;
            //brLblSuperficie.Visible = false;
            //brTxtCaracteristicas.Visible = false;
            //brTxtSuperficie.Visible = false;
            //brlblActivo.Visible = true;
            //brlblUbicacion.Visible = true;
        }
    }
}